##==================================================================================================
##  EVE - Expressive Vector Engine
##  Copyright : EVE Project Contributors
##  SPDX-License-Identifier: BSL-1.0
##==================================================================================================
##==================================================================================================
## Setup aggregation of tests
##==================================================================================================
add_custom_target(exhaustive.real.core.exe)
add_custom_target(exhaustive.real.core.scalar.exe)
add_custom_target(exhaustive.real.core.simd.exe)
add_dependencies(exhaustive.real.core.exe exhaustive.real.core.scalar.exe)
add_dependencies(exhaustive.real.core.exe exhaustive.real.core.simd.exe)
add_dependencies(exhaustive.real.scalar.exe exhaustive.real.core.scalar.exe)
add_dependencies(exhaustive.real.simd.exe exhaustive.real.core.simd.exe)
add_dependencies(exhaustive.real.exe exhaustive.real.core.exe)

##==================================================================================================
## Elementwise function unit tests
##==================================================================================================
make_all_units(ROOT exhaustive.real.core NAME abs                   ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME arg                   ARCH scalar simd TYPES ${real_types_32}    )
##make_all_units(ROOT exhaustive.real.core NAME bit_cast              ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME bit_ceil              ARCH scalar simd TYPES ${uint_or_real_types_32})
make_all_units(ROOT exhaustive.real.core NAME bit_floor             ARCH scalar simd TYPES ${uint_or_real_types_32})
##make_all_units(ROOT exhaustive.real.core NAME bit_mask              ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME bit_not               ARCH scalar simd TYPES ${integral_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME bit_width             ARCH scalar simd TYPES ${uint_types_32}    )
make_all_units(ROOT exhaustive.real.core NAME cbrt                  ARCH scalar simd TYPES ${real_types_32}    )
make_all_units(ROOT exhaustive.real.core NAME ceil                  ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME conj                  ARCH scalar simd TYPES ${real_types_32}    )
##make_all_units(ROOT exhaustive.real.core NAME convert               ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME countl_one            ARCH scalar simd TYPES ${uint_types_32}    )
##make_all_units(ROOT exhaustive.real.core NAME countl_zero           ARCH scalar simd TYPES ${uint_types_32}    )
##make_all_units(ROOT exhaustive.real.core NAME countr_one            ARCH scalar simd TYPES ${uint_types_32}    )
##make_all_units(ROOT exhaustive.real.core NAME countr_zero           ARCH scalar simd TYPES ${uint_types_32}    )
##make_all_units(ROOT exhaustive.real.core NAME dec                   ARCH scalar simd TYPES ${all_types_32}     )
##make_all_units(ROOT exhaustive.real.core NAME dist                  ARCH scalar simd TYPES ${all_types_32}     )
##make_all_units(ROOT exhaustive.real.core NAME div                   ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME exponent              ARCH scalar simd TYPES ${real_types_32}    )
##make_all_units(ROOT exhaustive.real.core NAME fdim                  ARCH scalar simd TYPES ${real_types_32}    )
make_all_units(ROOT exhaustive.real.core NAME firstbitset           ARCH scalar simd TYPES ${integral_types_32})
make_all_units(ROOT exhaustive.real.core NAME firstbitunset         ARCH scalar simd TYPES ${integral_types_32})
make_all_units(ROOT exhaustive.real.core NAME floor                 ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME frac                  ARCH scalar simd TYPES ${all_types_32}     )
####make_all_units(ROOT exhaustive.real.core NAME frexp                 ARCH scalar simd TYPES ${real_types_32}    )
##make_all_units(ROOT exhaustive.real.core NAME has_single_bit        ARCH scalar simd TYPES ${integral_types_32})
####make_all_units(ROOT exhaustive.real.core NAME ifrexp                ARCH scalar simd TYPES ${real_types_32}    )
make_all_units(ROOT exhaustive.real.core NAME inc                   ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_denormal           ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_eqz                ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_even               ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_finite             ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_flint              ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_gez                ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_gtz                ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_imag               ARCH scalar simd TYPES ${real_types_32}    )
make_all_units(ROOT exhaustive.real.core NAME is_infinite           ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_lez                ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_ltz                ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_nan                ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_negative           ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_nez                ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_ngez               ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_ngtz               ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_nlez               ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_nltz               ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_normal             ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_not_denormal       ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_not_equal          ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_not_finite         ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_not_imag           ARCH scalar simd TYPES ${real_types_32}    )
make_all_units(ROOT exhaustive.real.core NAME is_not_infinite       ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_not_nan            ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_not_real           ARCH scalar simd TYPES ${real_types_32}    )
make_all_units(ROOT exhaustive.real.core NAME is_odd                ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_ordered            ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_positive           ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME is_pow2               ARCH scalar simd TYPES ${integral_types_32})
make_all_units(ROOT exhaustive.real.core NAME is_real               ARCH scalar simd TYPES ${real_types_32}    )
make_all_units(ROOT exhaustive.real.core NAME logical_not           ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME mantissa              ARCH scalar simd TYPES ${real_types_32}    )
make_all_units(ROOT exhaustive.real.core NAME minus                 ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME nearest               ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME next                  ARCH scalar simd TYPES ${all_types_32}     )
##make_all_units(ROOT exhaustive.real.core NAME nextafter             ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME oneminus              ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME plus                  ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME popcount              ARCH scalar simd TYPES ${integral_types_32})
make_all_units(ROOT exhaustive.real.core NAME prev                  ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME rec                   ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME round                 ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME rsqrt                 ARCH scalar simd TYPES ${real_types_32}    )
make_all_units(ROOT exhaustive.real.core NAME saturate              ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME sign                  ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME signnz                ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME sqr                   ARCH scalar simd TYPES ${all_types_32}     )
make_all_units(ROOT exhaustive.real.core NAME sqr_abs               ARCH scalar simd TYPES ${real_types_32}    )
make_all_units(ROOT exhaustive.real.core NAME sqrt                  ARCH scalar simd TYPES ${real_types_32}    )
make_all_units(ROOT exhaustive.real.core NAME trunc                 ARCH scalar simd TYPES ${all_types_32}     )
